package com.dajingling.dao;

import com.dajingling.bean.Express;
import com.dajingling.exception.DuplicateCodeException;

import java.util.List;
import java.util.Map;

public interface BaseExpressDao {
    /**
     *查询数据库全部快递（总数，新增），待取件快递（总数，新增）
     * @return [{size:总数,day:新增},{size总数:,day:新增}]
     */
    List<Map<String,Integer>> console();

    /**
     * 查询所有快递
     * @param limit 分页：true，查询所有快递：false
     * @param offset SQL的起始索引
     * @param pageNumber 页查询数量
     * @return 快递列表
     */
    List<Express> findAll(boolean limit,int offset,int pageNumber);

    /**
     * 根据快递单号，查询快递信息
     * @param number 单号
     * @return 快递，不存在：null
     */
    Express findByNumber(String number);

    /**
     * 根据取件码，查询快递信息
     * @param code 取件码
     * @return 快递，不存在：null
     */
    Express findBycode(String code);

    /**
     * 根据用户电话号码，查询快递信息
     * @param userPhone 电话号码
     * @return 快递列表，不存在：null
     */
    List<Express> findByUserPhone(String userPhone);

    /**
     * 根据录入人手机号码，查询录入记录
     * @param sysPhone 手机号码
     * @return 快递列表，null
     */
    List<Express> findBySysPhone(String sysPhone);

    /**
     * 快递录入
     * @param e 要录入的快递对象
     * @return true，false
     */
    boolean insert(Express e) throws DuplicateCodeException;

    /**
     * 根据id，快递修改
     * @param id 快递id
     * @param newExpress 新的快递对象（number，company，userName，userPhone）
     * @return true，false
     */
    boolean update(int id,Express newExpress);

    /**
     * 更改快递状态
     * @param code 取件：1，未取件：0
     * @return true，false
     */
    boolean updateStatus(String code);

    /**
     * 根据id，快递删除
     * @param id 快递id
     * @return true，false
     */
    boolean delete(int id);
}
